package com.boc.ewr.util.file.enumeration;

import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.util.collection.SetUtils;

import java.util.Arrays;
import java.util.Optional;
import java.util.Set;

/**
 * 回执状态
 */
@Slf4j
public enum ReturnStatusEnum {

    STATUS01("16", "印鉴不符 余额不符 退回调整"),
    STATUS02("45", "暂缓发送"),
    STATUS03("44", "逾期催收"),
    STATUS04("43", "回执逾期"),
    STATUS05("42", "已退信"),
    STATUS06("41", "己出账"),
    STATUS07("32", "印鉴未登记 余额不符 回执未完成"),
    STATUS08("31", "印鉴未登记 余额相符 回执完成"),
    STATUS09("26", "再次验印相符 余额不符 退回调整"),
    STATUS10("25", "再次验印相符 余额不符 待复核"),
    STATUS11("24", "再次验印相符 余额不符 明细已录 收到回执"),
    STATUS12("23", "再次验印相符 余额不符 收到回执"),
    STATUS13("22", "再次验印相符 余额不符 已调整"),
    STATUS14("01", "印鉴相符 余额相符 对账完成"),
    STATUS15("02", "印鉴相符 余额不符 已调整"),
    STATUS16("03", "印鉴相符 余额不符 收到回执"),
    STATUS17("04", "印鉴相符 余额不符 明细已录 收到回执"),
    STATUS18("05", "印鉴相符 余额不符 待复核"),
    STATUS19("06", "印鉴相符 余额不符 退回调整"),
    STATUS20("11", "印鉴不符 余额不符 已调整"),
    STATUS21("12", "印鉴不符 余额待确认 无效回执"),
    STATUS22("13", "印鉴不符 余额不符 待确认回执"),
    STATUS23("14", "印鉴不符 余额不符 明细已录 待确认回执"),
    STATUS24("15", "印鉴不符 余额不符 待复核"),
    STATUS25("21", "再次验印相符 余额相符 已调整");

    private String index;
    private String value;

    ReturnStatusEnum(String index, String value) {

        this.index = index;
        this.value = value;
    }

    /**
     * 根据value获取枚举对象
     *
     * @param val
     * @return
     */
    public static ReturnStatusEnum getIndexByValue(String val) {
        Optional<ReturnStatusEnum> first = Arrays.stream(ReturnStatusEnum.values()).filter(e -> e.getValue().equals(val)).findFirst();
        ReturnStatusEnum expEnum = first.orElse(null);
        log.info("选择的枚举类型是：" + expEnum.toString());
        return expEnum;
    }

    /**
     * 有效对账状态
     * 印鉴相符 余额相符 对账完成
     * 印鉴相符 余额不符 已调整
     * 印鉴不符 余额不符 已调整
     * 再次验印相符 余额相符 已调整
     * 再次验印相符 余额不符 已调整
     */
    public static Set<String> getValidIndexSet() {
        return SetUtils.asSet(
                STATUS13.getIndex(),
                STATUS14.getIndex(),
                STATUS15.getIndex(),
                STATUS20.getIndex(),
                STATUS25.getIndex()
        );
    }

    /**
     * 无效对账状态
     * 己出账
     * 已退信
     * 回执期
     * 逾期催收
     * 暂缓发送
     * 印鉴未登记 余额相符 回执完完成
     * 印鉴未登记 余额不符 回执未完成
     * 印鉴相符 余额不符 收到回执
     * 再次验印相符 余额不符 收到回执
     * 印鉴不符 余额待确认 无效回执
     * 印鉴不符 余额不符 待确认回执
     * 印鉴相符 余额不符 明细已录 收到回执
     * 再次验印相符 余额不符 明细已录 收到回执
     * 印鉴不符 余额不符 明细已录 待确认回执
     * 印鉴相符 余额不符 待复核
     * 再次验印相符 余额不符 待复核
     * 印鉴不符 余额不符 待复核
     * 印鉴相符 余额不符 退回调整
     * 印鉴不符 余额不符 退回调整
     * 再次验印相符 余额不符 退回调整
     */
    public static Set<String> getInvalidIndexSet() {
        return SetUtils.asSet(
                STATUS01.getIndex(),
                STATUS02.getIndex(),
                STATUS03.getIndex(),
                STATUS04.getIndex(),
                STATUS05.getIndex(),
                STATUS06.getIndex(),
                STATUS07.getIndex(),
                STATUS08.getIndex(),
                STATUS09.getIndex(),
                STATUS10.getIndex(),
                STATUS11.getIndex(),
                STATUS12.getIndex(),
                STATUS16.getIndex(),
                STATUS17.getIndex(),
                STATUS18.getIndex(),
                STATUS19.getIndex(),
                STATUS21.getIndex(),
                STATUS22.getIndex(),
                STATUS23.getIndex(),
                STATUS24.getIndex()
        );
    }

    public String getIndex() {
        return index;
    }

    public void setIndex(String index) {
        this.index = index;
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }
}
